---
id: 6577333feab1e8e927014f03
title: Крок 63
challengeType: 20
dashedName: step-63
---

# --description--

Наявність `all([expression for i in iterable])` означає, що новий список створений шляхом оцінення `expression` кожної `i` в `iterable`. Після того, як функція `all()` ітерує над щойно створеним списком, список автоматично видаляється, оскільки він більше не потрібний.

Пам’ять можна зберегти за допомогою виразу генератора. Вирази генератора дотримуються синтаксису розуміння списків, але вони використовують круглі дужки замість квадратних.

Змініть розуміння списку на вираз генератора, видаливши квадратні дужки.

# --hints--

Перетворіть розуміння списку на вираз генератора, видаливши квадратні дужки.

```js
({ test: () => assert.match(code, /^(\s*)if\s+all\s*\(\s*constraint\s*<=\s*len\s*\(\s*re\.findall\s*\(\s*pattern\s*,\s*password\s*\)\s*\)\s*for\s+constraint\s*,\s*pattern\s+in\s+constraints\s*\)\s*:\s*^\1\s{4}break/m) })
```

# --seed--

## --seed-contents--

```py
import re
import secrets
import string


def generate_password(length, nums, special_chars, uppercase, lowercase):
    # Define the possible characters for the password
    letters = string.ascii_letters
    digits = string.digits
    symbols = string.punctuation

    # Combine all characters
    all_characters = letters + digits + symbols

    while True:
        password = ''
        # Generate password
        for _ in range(length):
            password += secrets.choice(all_characters)

        constraints = [
            (nums, r'\d'),
            (lowercase, r'[a-z]'),
            (uppercase, r'[A-Z]'),            
            (special_chars, fr'[{symbols}]')            
        ]

        # Check constraints
        count = 0
--fcc-editable-region--
        if all(
            [
                constraint <= len(re.findall(pattern, password))
                for constraint, pattern in constraints
            ]
        ):
--fcc-editable-region--
            break

    return password

# new_password = generate_password(8)
# print(new_password)
```
